Here we look at the Metacognition subscales (Wells et al.; Packet 3) in detail.
Differences across fieldsites
Mean scores by site
First, let’s look at scores for participants in each site:

Note that this plot includes both average scores for each site (in black), and individual scores for all of the participants in that site (small, colorful points in the background, which are “jittered” around a little so that you can see them all).
I have not looked at this in detail.
Now let’s look at these differences in more detail using the “raw data” for individual questions, rather than these subscale scores.
Responses by question, by site
Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vectorIgnoring unknown aesthetics: fill

I have not yet looked at this in detail, but it looks like it’s going to be interesting!
Distribution of responses for individual participants, by site
Another thing we might be interested in is how individual participants responded: Were there people who said yes to everything, or no to everything? How do these distributions of responses differ across participants in different sites?
Let’s take a look:
Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vector

I have not yet looked at this in detail.
Just for fun, here’s another way to look at the same data, overlaying the density distributions for each site on top of each other to see where they seem to be similar/different:
Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vector

LS0tCnRpdGxlOiAnR3JhcHBsaW5nIHdpdGggdGhlICJNZXRhY29nbml0aW9uIiBzdWJzY2FsZXMnCnN1YnRpdGxlOiAnTGFzdCB1cGRhdGVkIDIwMTgtMDQtMDgnCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAotLS0KCmBgYHtyLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQojIHNldCB3b3JraW5nIGRpcmVjdG9yCiMgc2V0d2QoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9UZW1wbGV0b24gR3JhbnQvREFUQSBXUkFOR0xJTkcvdGVtcGxldG9uX3BhY2tldHMvcGFja2V0czEyMy8iKQoKIyBsb2FkIHBhY2thZ2VzCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHJtcykKbGlicmFyeShnZ2RlbmRybykKbGlicmFyeShwc3ljaCkKCiMgbG9hZCBxdWVzdGlvbiBrZXkgKGluY2x1ZGluZyBtYW51YWwgcmV2ZXJzZS1jb2RpbmcpCnF1ZXN0aW9uX2tleSA8LSByZWFkLmNzdigiLy9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9UZW1wbGV0b24gR3JhbnQvREFUQSBXUkFOR0xJTkcvdGVtcGxldG9uX3BhY2tldHMvcGFja2V0czEyMy9wYWNrZXRzMTIzX3F1ZXN0aW9uX2tleV9ieWhhbmQuY3N2IikKCiMgbG9hZCBkYXRhIChyZXZlcnNlLWNvZGVkKQpkX2xvbmcgPC0gcmVhZF9jc3YoIi8vVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RBVEEgV1JBTkdMSU5HL3RlbXBsZXRvbl9wYWNrZXRzL3BhY2tldHMxMjMvcGFja2V0czEyM19kYXRhX2J5cXVlc3Rpb25fbG9uZy5jc3YiKSAlPiUKICBtdXRhdGUoY3RyeSA9IGZhY3RvcihjdHJ5LCAKICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ1cyIsICJnaGFuYSIsICJ0aGFpbGFuZCIsICJjaGluYSIsICJ2YW51YXR1IikpKQpkX2xvbmdfc3Vic2NhbGUgPC0gcmVhZF9jc3YoIi8vVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RBVEEgV1JBTkdMSU5HL3RlbXBsZXRvbl9wYWNrZXRzL3BhY2tldHMxMjMvcGFja2V0czEyM19kYXRhX2J5c3Vic2NhbGVfbG9uZy5jc3YiKSAlPiUKICBtdXRhdGUoY3RyeSA9IGZhY3RvcihjdHJ5LCAKICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ1cyIsICJnaGFuYSIsICJ0aGFpbGFuZCIsICJjaGluYSIsICJ2YW51YXR1IikpKQoKIyBsb2FkIGRhdGEgKGJlZm9yZSByZXZlcnNlLWNvZGluZykKZF9hbGwgPC0gcmVhZC5jc3YoIi8vVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RBVEEgV1JBTkdMSU5HL3RlbXBsZXRvbl9wYWNrZXRzL3BhY2tldHMxMjMvcGFja2V0czEyM19kYXRhLmNzdiIpCgojIG1ha2UgY3VzdG9tIGZ1bmN0aW9ucwpyb3VuZDIgPC0gZnVuY3Rpb24oeCkge2Zvcm1hdChyb3VuZCh4LCAyKSwgZGlnaXRzID0gMil9CmBgYAoKSGVyZSB3ZSBsb29rIGF0IHRoZSBNZXRhY29nbml0aW9uIHN1YnNjYWxlcyAoV2VsbHMgZXQgYWwuOyBQYWNrZXQgMykgaW4gZGV0YWlsLgoKIyBEaWZmZXJlbmNlcyBhY3Jvc3MgZmllbGRzaXRlcwoKIyMgTWVhbiBzY29yZXMgYnkgc2l0ZQoKRmlyc3QsIGxldCdzIGxvb2sgYXQgc2NvcmVzIGZvciBwYXJ0aWNpcGFudHMgaW4gZWFjaCBzaXRlOgoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX2xvbmdfc3Vic2NhbGVfYm9vdCA8LSBkX2xvbmdfc3Vic2NhbGUgJT4lCiAgZmlsdGVyKCFpcy5uYShzdW1fc2NvcmUpKSAlPiUKICBncm91cF9ieShjdHJ5LCBwYWNrZXQsIHN1YnNjYWxlKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRzdW1fc2NvcmUpKSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBmaWx0ZXIoc3Vic2NhbGUgIT0gImF0dG4iKSAlPiUKICBsZWZ0X2pvaW4oZF9sb25nX3N1YnNjYWxlICU+JQogICAgICAgICAgICAgIGZpbHRlcighaXMubmEoc3VtX3Njb3JlKSkgJT4lCiAgICAgICAgICAgICAgY291bnQoY3RyeSwgcGFja2V0LCBzdWJzY2FsZSkpICU+JQogIG11dGF0ZShwYWNrZXQgPSBwYXN0ZSgicGFja2V0IiwgcGFja2V0KSwKICAgICAgICAgY3RyeSA9IGZhY3RvcihjdHJ5LAogICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoYW5hIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhhaWxhbmQiLCAiY2hpbmEiLCAidmFudWF0dSIpKSwKICAgICAgICAgc3Vic2NhbGUgPSAKICAgICAgICAgICBmYWN0b3Ioc3Vic2NhbGUsCiAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImV4d2wiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh3bF9leHRyYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZV8wMXRvMTQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlXzE1dG8xNiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGV2IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbl9zZW5zb3J5X3NlZWtpbmciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuX2JvZHlfYXdhcmVuZXNzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbl90cmFpdF9tZXRhbW9vZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlcjJfaGFsbHVjaW5hdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludm9fVklTUV9kaWFsb2dpY19zcGVlY2giLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52b19WSVNRX2lubmVyX3NwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludm9fVklTUV9ldmFsX21vdGl2X2lubmVyX3NwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludm9faGFyZHlfYmVudGFsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlcl9wb3NleV9sb3NjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuY29fbGV3aWNraSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFfdmFuX2VsayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9jb25maWRlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X3Bvc2l0aXZlX2JlbGllZnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfY29nbml0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X3VuY29udHJvbGxhYmlsaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X25lZWRfY29udHJvbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pbndfbWVudGFsX3N0YXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pbndfbGlmZV9ldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW53X2luYW5pbWF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pbndfc2VsdmVzX3NvdWxzX3dvcmxkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlud19lcGlzdGVtaWMiKSwKICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiYWJzb3JwdGlvbiAodGVsbGVnZW4pIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFic29ycHRpb24gKGV4dHJhKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyAoIzEtMTQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzICgjMTUtMTYpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Bpcml0dWFsIGV2ZW50cyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5zb3J5IHNlZWtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJib2R5IGF3YXJlbmVzcyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdHRlbnRpb24gdG8gZmVlbGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYWxsdWNpbmF0aW9uIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZJU1E6IGRpYWxvZ2ljIHNwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZJU1E6IGlubmVyIHNwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZJU1E6IGV2YWx1YXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbm5lciBzcGVlY2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWFyaW5nIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuY29kaW5nIHN0eWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWluZCBtZXRhcGhvcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXRhY29nLjogbGFjayBvZiBjb2duaXRpdmUgY29uZmlkZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFjb2cuOiBwb3NpdGl2ZSBiZWxpZWZzIHJlOiB3b3JyeWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFjb2cuOiBjb2duaXRpdmUgc2VsZi1jb25zY2lvdXNuZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YWNvZy46IHVuY29udHJvbGxhYmlsaXR5L2RhbmdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFjb2cuOiBuZWVkIHRvIGNvbnRyb2wgdGhvdWdodHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdWFsaXNtOiBtZW50YWwgc3RhdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVhbGlzbTogbGlmZSBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdWFsaXNtOiBpbmFuaW1hdGUgY29uc2Npb3VzbmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IG1pbmRzLCBzZWx2ZXMsICYgd29ybGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdWFsaXNtOiBlcGlzdGVtb2xvZ3kiKSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjV9CmdncGxvdChkX2xvbmdfc3Vic2NhbGVfYm9vdCAlPiUKICAgICAgICAgZmlsdGVyKGdyZXBsKCJtZXRhY29nIiwgc3Vic2NhbGUpKSAlPiUKICAgICAgICAgbXV0YXRlKHN1YnNjYWxlID0gYXMuY2hhcmFjdGVyKHN1YnNjYWxlKSwKICAgICAgICAgICAgICAgIHN1YnNjYWxlID0gZ3N1YigibWV0YWNvZy46ICIsICIiLCBzdWJzY2FsZSkpLAogICAgICAgYWVzKHggPSBjdHJ5LAogICAgICAgICAgIHkgPSBNZWFuKSkgKwogIGZhY2V0X2dyaWQofiBzdWJzY2FsZSkgKwogIGdlb21fcG9pbnQoZGF0YSA9IGRfbG9uZ19zdWJzY2FsZSAlPiUKICAgICAgICAgICAgICAgZmlsdGVyKGdyZXBsKCJ0YXRfIiwgc3Vic2NhbGUpLAogICAgICAgICAgICAgICAgICAgICAgIWlzLm5hKHN1bV9zY29yZSkpICU+JQogICAgICAgICAgICAgICBtdXRhdGUoc3Vic2NhbGUgPSAKICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yKHN1YnNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidGF0X2NvZ25pdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfY29uZmlkZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfbmVlZF9jb250cm9sIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9wb3NpdGl2ZV9iZWxpZWZzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF91bmNvbnRyb2xsYWJpbGl0eSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiY29nbml0aXZlIHNlbGYtY29uc2Npb3VzbmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWNrIG9mIGNvZ25pdGl2ZSBjb25maWRlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWQgdG8gY29udHJvbCB0aG91Z2h0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGl2ZSBiZWxpZWZzIHJlOiB3b3JyeWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmNvbnRyb2xsYWJpbGl0eS9kYW5nZXIiKSkpLAogICAgICAgICAgICAgYWVzKHkgPSBzdW1fc2NvcmUsIGNvbG9yID0gY3RyeSksCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcih3aWR0aCA9IDAuMywgaGVpZ2h0ID0gMC4xNSksCiAgICAgICAgICAgICBhbHBoYSA9IDAuMywgc2l6ZSA9IDEpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBMb3dlciwgeW1heCA9IFVwcGVyKSkgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoIihuPSIsIG4sICIpIiksIHkgPSBMb3dlciksIAogICAgICAgICAgICBzaXplID0gMiwgbnVkZ2VfeCA9IDAuMTUsIGhqdXN0ID0gMCkgKwogICMgc2NhbGVfeF9kaXNjcmV0ZShleHBhbmQgPSBjKDAsIDEpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoLTEyLjUsIDEyLjUpLCBicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAxMCkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgbGFicyh0aXRsZSA9ICJNZWFuIG1ldGFjb2duaXRpb24gc2NvcmVzIGJ5IHNpdGUgKFdlbGxzIGV0IGFsLikiLAogICAgICAgc3VidGl0bGUgPSAiQSBoaWdoZXIgc2NvcmUgaW5kaWNhdGVzIG1vcmUgZW5kb3JzZW1lbnRzIG9mICdtZXRhY29nbml0aXZlJyBldmVudHMgKHJhbmdlOiAtMTIgdG8gMTIpXG5FcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIGNvbG9yID0gIlNpdGUiLAogICAgICAgeSA9ICJNZWFuIHNjb3JlIikKYGBgCgpOb3RlIHRoYXQgdGhpcyBwbG90IGluY2x1ZGVzIGJvdGggYXZlcmFnZSBzY29yZXMgZm9yIGVhY2ggc2l0ZSAoaW4gYmxhY2spLCBhbmQgaW5kaXZpZHVhbCBzY29yZXMgZm9yIGFsbCBvZiB0aGUgcGFydGljaXBhbnRzIGluIHRoYXQgc2l0ZSAoc21hbGwsIGNvbG9yZnVsIHBvaW50cyBpbiB0aGUgYmFja2dyb3VuZCwgd2hpY2ggYXJlICJqaXR0ZXJlZCIgYXJvdW5kIGEgbGl0dGxlIHNvIHRoYXQgeW91IGNhbiBzZWUgdGhlbSBhbGwpLgoKSSBoYXZlIG5vdCBsb29rZWQgYXQgdGhpcyBpbiBkZXRhaWwuCgpOb3cgbGV0J3MgbG9vayBhdCB0aGVzZSBkaWZmZXJlbmNlcyBpbiBtb3JlIGRldGFpbCB1c2luZyB0aGUgInJhdyBkYXRhIiBmb3IgaW5kaXZpZHVhbCBxdWVzdGlvbnMsIHJhdGhlciB0aGFuIHRoZXNlIHN1YnNjYWxlIHNjb3Jlcy4KCiMjIFJlc3BvbnNlcyBieSBxdWVzdGlvbiwgYnkgc2l0ZQoKYGBge3IsIGZpZy53aWR0aCA9IDEwLCBmaWcuYXNwID0gMC44fQpkX3Bsb3QgPC0gZF9sb25nICU+JQogIGZpbHRlcihncmVwbCgidGF0XyIsIHF1ZXN0aW9uKSkgJT4lCiAgbGVmdF9qb2luKHF1ZXN0aW9uX2tleSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdChxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwsIAogICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uX3RleHQsCiAgICAgICAgICAgICAgICAgICAgICAgYnloYW5kX2NvZGluZywKICAgICAgICAgICAgICAgICAgICAgICBieWhhbmRfc3Vic2NhbGUpICU+JQogICAgICAgICAgICAgIHJlbmFtZShxdWVzdGlvbiA9IHF1ZXN0aW9uX2xhYmVsX3VuaXZlcnNhbCwKICAgICAgICAgICAgICAgICAgICAgY29kaW5nID0gYnloYW5kX2NvZGluZywKICAgICAgICAgICAgICAgICAgICAgc3Vic2NhbGUgPSBieWhhbmRfc3Vic2NhbGUpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIG11dGF0ZShjb2RpbmcgPSBmYWN0b3IoY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiLTEiLCAiMSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiKFJFVkVSU0VEKSIsICIiKSksCiAgICAgICAgIHF1ZXN0aW9uX3RleHRfc2hvcnQgPSBnc3ViKCcoLnsxLDMwfSkoXFxzfCQpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcMVxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKHF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjogIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0cihxdWVzdGlvbl90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gMSwgc3RvcCA9IDEwMDAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIi4uLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RpbmcpKSkgJT4lCiAgY291bnQoY3RyeSwgc3Vic2NhbGUsIHF1ZXN0aW9uX3RleHRfc2hvcnQsIHJlc3BvbnNlKSAlPiUKICBzcHJlYWQocmVzcG9uc2UsIG4pICU+JQogIG11dGF0ZV9hdCh2YXJzKGAtMmA6YDJgKSwgCiAgICAgICAgICAgIGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUKICBhcnJhbmdlKGN0cnksIGAtMmApICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigib3JkZXIiKSAlPiUKICBtdXRhdGUob3JkZXIgPSBhcy5udW1lcmljKG9yZGVyKSwKICAgICAgICAgYWdyZWVfbiA9IGAxYCArIGAyYCwKICAgICAgICAgdG90YWxfbiA9IGAtMmAgKyBgLTFgICsgYDBgICsgYDFgICsgYDJgKSAlPiUKICBnYXRoZXIocmVzcG9uc2UsIG4sIGMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGZhY3RvcihyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiLTIiLCAiLTEiLCAiMCIsICIxIiwgIjIiKSksCiAgICAgICAgIGN0cnkgPSBmYWN0b3IoY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ1cyIsICJnaGFuYSIsICJ0aGFpbGFuZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaW5hIiwgInZhbnVhdHUiKSwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJVUyIsICJHaGFuYSIsICJUaGFpbGFuZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoaW5hIiwgIlZhbnVhdHUiKSkpICU+JQogIGRpc3RpbmN0KCkKCmFkanVzdCA8LSAxNQoKZ2dwbG90KGRfcGxvdCAlPiUKICAgICAgICAgbXV0YXRlKHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU3Ryb25nbHkgZGlzYWdyZWUiLCAiRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmVpdGhlciBhZ3JlZSBub3IgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWdyZWUiLCAiU3Ryb25nbHkgYWdyZWUiKSksCiAgICAgICAgICAgICAgICBzdWJzY2FsZSA9IAogICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3Ioc3Vic2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ0YXRfY29nbml0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9jb25maWRlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9uZWVkX2NvbnRyb2wiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X3Bvc2l0aXZlX2JlbGllZnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X3VuY29udHJvbGxhYmlsaXR5IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJjb2duaXRpdmUgc2VsZi1jb25zY2lvdXNuZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhY2sgb2YgY29nbml0aXZlIGNvbmZpZGVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmVlZCB0byBjb250cm9sIHRob3VnaHRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvc2l0aXZlIGJlbGllZnMgcmU6IHdvcnJ5aW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuY29udHJvbGxhYmlsaXR5L2RhbmdlciIpKSksCiAgICAgICBhZXMoeCA9IHJlb3JkZXIocXVlc3Rpb25fdGV4dF9zaG9ydCwgZGVzYyhxdWVzdGlvbl90ZXh0X3Nob3J0KSksCiAgICAgICAgICAgIyB4ID0gcmVvcmRlcihxdWVzdGlvbl90ZXh0X3Nob3J0LCBkZXNjKG9yZGVyKSksCiAgICAgICAgICAgeSA9IG4sIGZpbGwgPSByZXNwb25zZSkpICsKICBmYWNldF9ncmlkKHN1YnNjYWxlIH4gY3RyeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fYmFyKHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2soKSwgc3RhdCA9ICJpZGVudGl0eSIsIAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMikgKwogIGdlb21fdGV4dChkYXRhID0gZF9wbG90ICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KGN0cnksIHN1YnNjYWxlLCBxdWVzdGlvbl90ZXh0X3Nob3J0LCBvcmRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgYWdyZWVfbiwgdG90YWxfbikgJT4lCiAgICAgICAgICAgICAgbXV0YXRlKHN1YnNjYWxlID0gCiAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcihzdWJzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInRhdF9jb2duaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X2NvbmZpZGVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X25lZWRfY29udHJvbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfcG9zaXRpdmVfYmVsaWVmcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfdW5jb250cm9sbGFiaWxpdHkiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoImNvZ25pdGl2ZSBzZWxmLWNvbnNjaW91c25lc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFjayBvZiBjb2duaXRpdmUgY29uZmlkZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkIHRvIGNvbnRyb2wgdGhvdWdodHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpdmUgYmVsaWVmcyByZTogd29ycnlpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5jb250cm9sbGFiaWxpdHkvZGFuZ2VyIikpKSwKICAgICAgICAgICAgYWVzKHkgPSBtYXgoZF9wbG90JHRvdGFsX24pICsgYWRqdXN0LCBmaWxsID0gTlVMTCwKICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKHJvdW5kKGFncmVlX24vdG90YWxfbiwgMikqMTAwLCAiJSIpKSwgCiAgICAgICAgICAgIHNpemUgPSAzLCBoanVzdCA9IDEpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCBtYXgoZF9wbG90JHRvdGFsX24pICsgYWRqdXN0KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiUFJHbiIpICsKICB0aGVtZV9idygpICsKICBsYWJzKHRpdGxlID0gIlJlc3BvbnNlcyB0byAnTWV0YWNvZ25pdGlvbicgKFdlbGxzIGV0IGFsLikgc2NhbGUgaXRlbXMiLAogICAgICAgc3VidGl0bGUgPSAiJSBjb3JyZXNwb25kcyB0byByZXNwb25zZXMgb2YgJ0FncmVlJyBvciAnU3Ryb25nbHkgYWdyZWUnIChncmVlbikiLAogICAgICAgeCA9ICIiLCB5ID0gIkNvdW50IG9mIHJlc3BvbnNlcyIsIGZpbGwgPSAiUmVzcG9uc2UiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIsCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpICsKICAjIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSkpCiAgY29vcmRfZmxpcCgpCgpybShhZGp1c3QpCmBgYAoKSSBoYXZlIG5vdCB5ZXQgbG9va2VkIGF0IHRoaXMgaW4gZGV0YWlsLCBidXQgaXQgbG9va3MgbGlrZSBpdCdzIGdvaW5nIHRvIGJlIGludGVyZXN0aW5nIQoKIyBEaXN0cmlidXRpb24gb2YgcmVzcG9uc2VzIGZvciBpbmRpdmlkdWFsIHBhcnRpY2lwYW50cywgYnkgc2l0ZQoKQW5vdGhlciB0aGluZyB3ZSBtaWdodCBiZSBpbnRlcmVzdGVkIGluIGlzIGhvdyBpbmRpdmlkdWFsIHBhcnRpY2lwYW50cyByZXNwb25kZWQ6IFdlcmUgdGhlcmUgcGVvcGxlIHdobyBzYWlkIHllcyB0byBldmVyeXRoaW5nLCBvciBubyB0byBldmVyeXRoaW5nPyBIb3cgZG8gdGhlc2UgZGlzdHJpYnV0aW9ucyBvZiByZXNwb25zZXMgZGlmZmVyIGFjcm9zcyBwYXJ0aWNpcGFudHMgaW4gZGlmZmVyZW50IHNpdGVzPwoKTGV0J3MgdGFrZSBhIGxvb2s6CgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDN9CmRfbG9uZyAlPiUKICBmaWx0ZXIoZ3JlcGwoInRhdF8iLCBxdWVzdGlvbiksCiAgICAgICAgICFncmVwbCgiYXR0biIsIHF1ZXN0aW9uKSwgIWlzLm5hKHJlc3BvbnNlKSkgJT4lCiAgbGVmdF9qb2luKHF1ZXN0aW9uX2tleSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdChxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwsIAogICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uX3RleHQsCiAgICAgICAgICAgICAgICAgICAgICAgYnloYW5kX2NvZGluZywKICAgICAgICAgICAgICAgICAgICAgICBieWhhbmRfc3Vic2NhbGUpICU+JQogICAgICAgICAgICAgIHJlbmFtZShxdWVzdGlvbiA9IHF1ZXN0aW9uX2xhYmVsX3VuaXZlcnNhbCwKICAgICAgICAgICAgICAgICAgICAgY29kaW5nID0gYnloYW5kX2NvZGluZywKICAgICAgICAgICAgICAgICAgICAgc3Vic2NhbGUgPSBieWhhbmRfc3Vic2NhbGUpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGZhY3RvcihyZXNwb25zZSksCiAgICAgICAgIGNvZGluZyA9IGZhY3Rvcihjb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCItMSIsICIxIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCIoUkVWRVJTRUQpIiwgIiIpKSwKICAgICAgICAgcXVlc3Rpb25fdGV4dF9zaG9ydCA9IGdzdWIoJyguezEsMTMwfSkoXFxzfCQpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcMVxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKHN1YnN0cihxdWVzdGlvbl90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gMSwgc3RvcCA9IDEwMDAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIi4uLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RpbmcpKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBjb3VudChjdHJ5LCBzdWJzY2FsZSwgc3ViaiwgcmVzcG9uc2UpICU+JQogIHNwcmVhZChyZXNwb25zZSwgbikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoYyhgLTJgLCBgLTFgLCBgMGAsIGAxYCwgYDJgKSksIGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUKICBtdXRhdGUodG90YWxfbiA9IGAtMmAgKyBgLTFgICsgYDBgICsgYDFgICsgYDJgLAogICAgICAgICBwcm9wX24yID0gYC0yYC90b3RhbF9uLAogICAgICAgICBwcm9wX24xID0gYC0xYC90b3RhbF9uLAogICAgICAgICBwcm9wX24wID0gYDBgL3RvdGFsX24sCiAgICAgICAgIHByb3BfcDEgPSBgMWAvdG90YWxfbiwKICAgICAgICAgcHJvcF9wMiA9IGAyYC90b3RhbF9uLAogICAgICAgICBjdHJ5ID0gZmFjdG9yKGN0cnksCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAidGhhaWxhbmQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGluYSIsICJ2YW51YXR1IiksCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiVVMiLCAiR2hhbmEiLCAiVGhhaWxhbmQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGluYSIsICJWYW51YXR1IikpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIHNlbGVjdCgtYyhgLTJgLCBgLTFgLCBgMGAsIGAxYCwgYDJgKSkgJT4lCiAgZ2F0aGVyKHJlc3BvbnNlLCBwcm9wLCBzdGFydHNfd2l0aCgicHJvcCIpKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBmYWN0b3IocmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInByb3BfbjIiLCAicHJvcF9uMSIsICJwcm9wX24wIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3BfcDEiLCAicHJvcF9wMiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTdHJvbmdseSBkaXNhZ3JlZSIsICJEaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5laXRoZXIuLi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZ3JlZSIsICJTdHJvbmdseSBhZ3JlZSIpKSwKICAgICAgICAgc3Vic2NhbGUgPSBmYWN0b3Ioc3Vic2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInRhdF9jb2duaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfY29uZmlkZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9uZWVkX2NvbnRyb2wiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfcG9zaXRpdmVfYmVsaWVmcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF91bmNvbnRyb2xsYWJpbGl0eSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJjb2duaXRpdmUgc2VsZi1jb25zY2lvdXNuZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFjayBvZiBjb2duaXRpdmUgY29uZmlkZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWQgdG8gY29udHJvbCB0aG91Z2h0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvc2l0aXZlIGJlbGllZnMgcmU6IHdvcnJ5aW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5jb250cm9sbGFiaWxpdHkvZGFuZ2VyIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwcm9wLCBmaWxsID0gY3RyeSkpICsKICBmYWNldF9ncmlkKGludGVyYWN0aW9uKHJlc3BvbnNlLCBzdWJzY2FsZSwgc2VwID0gIlxuIikgfiBjdHJ5LCAKICAgICAgICAgICAgIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDEvNSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMC4yNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMwMCwgMTApKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZV9idygpICsKICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbnMgb2YgaG93IG1hbnkgdGltZXMgcGFydGljaXBhbnRzIGVuZG9yc2VkIGVhY2ggcmVzcG9uc2Ugb3B0aW9uIGZvciB0aGUgJ01ldGFjb2duaXRpb24nIChXZWxscyBldCBhbC4pIHNjYWxlIGl0ZW1zIiwKICAgICAgIHggPSAiUHJvcG9ydGlvbiBvZiByZXNwb25zZXMgKGF0IHRoZSBpbmRpdmlkdWFsIHBhcnRpY2lwYW50IGxldmVsKSIsIHkgPSAiQ291bnQgb2YgcGFydGljaXBhbnRzIiwgZmlsbCA9ICJTaXRlIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKYGBgCgpJIGhhdmUgbm90IHlldCBsb29rZWQgYXQgdGhpcyBpbiBkZXRhaWwuCgpKdXN0IGZvciBmdW4sIGhlcmUncyBhbm90aGVyIHdheSB0byBsb29rIGF0IHRoZSBzYW1lIGRhdGEsIG92ZXJsYXlpbmcgdGhlIGRlbnNpdHkgZGlzdHJpYnV0aW9ucyBmb3IgZWFjaCBzaXRlIG9uIHRvcCBvZiBlYWNoIG90aGVyIHRvIHNlZSB3aGVyZSB0aGV5IHNlZW0gdG8gYmUgc2ltaWxhci9kaWZmZXJlbnQ6CgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDF9CmRfbG9uZyAlPiUKICBmaWx0ZXIoZ3JlcGwoInRhdF8iLCBxdWVzdGlvbiksCiAgICAgICAgICFncmVwbCgiYXR0biIsIHF1ZXN0aW9uKSwgIWlzLm5hKHJlc3BvbnNlKSkgJT4lCiAgbGVmdF9qb2luKHF1ZXN0aW9uX2tleSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdChxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwsIAogICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uX3RleHQsCiAgICAgICAgICAgICAgICAgICAgICAgYnloYW5kX2NvZGluZywKICAgICAgICAgICAgICAgICAgICAgICBieWhhbmRfc3Vic2NhbGUpICU+JQogICAgICAgICAgICAgIHJlbmFtZShxdWVzdGlvbiA9IHF1ZXN0aW9uX2xhYmVsX3VuaXZlcnNhbCwKICAgICAgICAgICAgICAgICAgICAgY29kaW5nID0gYnloYW5kX2NvZGluZywKICAgICAgICAgICAgICAgICAgICAgc3Vic2NhbGUgPSBieWhhbmRfc3Vic2NhbGUpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGZhY3RvcihyZXNwb25zZSksCiAgICAgICAgIGNvZGluZyA9IGZhY3Rvcihjb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCItMSIsICIxIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCIoUkVWRVJTRUQpIiwgIiIpKSwKICAgICAgICAgcXVlc3Rpb25fdGV4dF9zaG9ydCA9IGdzdWIoJyguezEsMTMwfSkoXFxzfCQpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcMVxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKHN1YnN0cihxdWVzdGlvbl90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gMSwgc3RvcCA9IDEwMDAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIi4uLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RpbmcpKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBjb3VudChjdHJ5LCBzdWJzY2FsZSwgc3ViaiwgcmVzcG9uc2UpICU+JQogIHNwcmVhZChyZXNwb25zZSwgbikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoYyhgLTJgLCBgLTFgLCBgMGAsIGAxYCwgYDJgKSksIGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUKICBtdXRhdGUodG90YWxfbiA9IGAtMmAgKyBgLTFgICsgYDBgICsgYDFgICsgYDJgLAogICAgICAgICBwcm9wX24yID0gYC0yYC90b3RhbF9uLAogICAgICAgICBwcm9wX24xID0gYC0xYC90b3RhbF9uLAogICAgICAgICBwcm9wX24wID0gYDBgL3RvdGFsX24sCiAgICAgICAgIHByb3BfcDEgPSBgMWAvdG90YWxfbiwKICAgICAgICAgcHJvcF9wMiA9IGAyYC90b3RhbF9uLAogICAgICAgICBjdHJ5ID0gZmFjdG9yKGN0cnksCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAidGhhaWxhbmQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGluYSIsICJ2YW51YXR1IiksCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiVVMiLCAiR2hhbmEiLCAiVGhhaWxhbmQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGluYSIsICJWYW51YXR1IikpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIHNlbGVjdCgtYyhgLTJgLCBgLTFgLCBgMGAsIGAxYCwgYDJgKSkgJT4lCiAgZ2F0aGVyKHJlc3BvbnNlLCBwcm9wLCBzdGFydHNfd2l0aCgicHJvcCIpKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBmYWN0b3IocmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInByb3BfbjIiLCAicHJvcF9uMSIsICJwcm9wX24wIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3BfcDEiLCAicHJvcF9wMiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTdHJvbmdseSBkaXNhZ3JlZSIsICJEaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5laXRoZXIgYWdyZWUgbm9yIGRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWdyZWUiLCAiU3Ryb25nbHkgYWdyZWUiKSksCiAgICAgICAgIHN1YnNjYWxlID0gZmFjdG9yKHN1YnNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ0YXRfY29nbml0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X2NvbmZpZGVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfbmVlZF9jb250cm9sIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X3Bvc2l0aXZlX2JlbGllZnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfdW5jb250cm9sbGFiaWxpdHkiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiY29nbml0aXZlIHNlbGYtY29uc2Npb3VzbmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhY2sgb2YgY29nbml0aXZlIGNvbmZpZGVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkIHRvIGNvbnRyb2wgdGhvdWdodHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGl2ZSBiZWxpZWZzIHJlOiB3b3JyeWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuY29udHJvbGxhYmlsaXR5L2RhbmdlciIpKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcHJvcCwgZmlsbCA9IGN0cnkpKSArCiAgZmFjZXRfZ3JpZChyZXNwb25zZSB+IHN1YnNjYWxlLCAKICAgICAgICAgICAgIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZml4ZWQiKSArCiAgZ2VvbV9kZW5zaXR5KGFscGhhID0gMC4zKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAwLjI1KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMzAwLCAxMCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHRoZW1lX2J3KCkgKwogIGxhYnModGl0bGUgPSAiRGlzdHJpYnV0aW9ucyBvZiBob3cgbWFueSB0aW1lcyBwYXJ0aWNpcGFudHMgZW5kb3JzZWQgZWFjaFxucmVzcG9uc2Ugb3B0aW9uIGZvciB0aGUgJ01ldGFjb2duaXRpb24nIChXZWxscyBldCBhbC4pIHNjYWxlIGl0ZW1zIiwKICAgICAgIHggPSAiUHJvcG9ydGlvbiBvZiByZXNwb25zZXMgKGF0IHRoZSBpbmRpdmlkdWFsIHBhcnRpY2lwYW50IGxldmVsKSIsIHkgPSAiQ291bnQgb2YgcGFydGljaXBhbnRzIiwgZmlsbCA9ICJTaXRlIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpgYGAK